home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C++ / Applications / nanoInstall 1.0 / source / readThem.cp < prev    next >
Text File  |  1996-07-05  |  2KB  |  83 lines

  1. #include "nanoInstall.h"
  2.  
  3. void UnlockAddLockRelease( Handle theResource, OSType theType, short resNo);
  4.  
  5. OSErr GetForkAndClose( short theFork, OSType theType, short resNo);
  6.  
  7. OSErr readThem()
  8. {
  9.     OSErr result = -1; // user canceled
  10.  
  11.     standardgetfile sf;
  12.  
  13.     short resNo = 128;
  14.  
  15.     while( sf.doIt())
  16.     {
  17.         short resFork = 0;
  18.         //
  19.         // store resource fork:
  20.         //
  21.         if( (result = FSpOpenRF( &sf.sfFile, fsCurPerm, &resFork)) == noErr)
  22.         {
  23.             result = GetForkAndClose( resFork, 'RsFk', resNo);
  24.         }
  25.         //
  26.         // store data fork:
  27.         //
  28.         short dataFork = 0;
  29.  
  30.         if( (result = FSpOpenDF( &sf.sfFile, fsCurPerm, &dataFork)) == noErr)
  31.         {
  32.             result = GetForkAndClose( dataFork, 'DtFk', resNo);
  33.         }
  34.         //
  35.         // store finder info:
  36.         //
  37.         Handle theResource = NewHandle( sizeof( FInfo));
  38.  
  39.             (void)FSpGetFInfo( &sf.sfFile, (FInfo *)*theResource);
  40.  
  41.         UnlockAddLockRelease( theResource, 'fInf', resNo);
  42.         //
  43.         // store file name:
  44.         //
  45.         const int length_plus_one = sf.sfFile.name[ 0] + 1;
  46.  
  47.         Handle nameResource = NewHandle( length_plus_one);
  48.  
  49.             BlockMoveData( &sf.sfFile.name, *nameResource, length_plus_one);
  50.  
  51.         UnlockAddLockRelease( nameResource, 'fNam', resNo);
  52.  
  53.         resNo += 1;
  54.     }
  55.     return result;
  56. }
  57.  
  58. void UnlockAddLockRelease( Handle theResource, OSType theType, short resNo)
  59. {
  60.     //    Unlock( theResource);    not needed; we release the memory real soon now.
  61.     AddResource( theResource, theType, resNo, emptyPString);
  62.  
  63.     SetResAttrs( theResource, resLocked);
  64.     ChangedResource( theResource);
  65.  
  66.     ReleaseResource( theResource);
  67. }
  68.  
  69. OSErr GetForkAndClose( short theFork, OSType theType, short resNo)
  70. {
  71.     long numtoread = 0;
  72.  
  73.     (void)GetEOF( theFork, &numtoread);
  74.  
  75.     Handle theResource = NewHandle( numtoread);
  76.  
  77.         OSErr result = FSRead( theFork, &numtoread, *theResource);
  78.         FSClose( theFork);
  79.  
  80.     UnlockAddLockRelease( theResource, theType, resNo);
  81.     return result;
  82. }
  83.